package com.doit.day02;

import com.doit.day01._03_redis的客户端;
import org.apache.commons.lang3.RandomUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.resps.Tuple;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

/*
不断有英雄会被选择
我需要统计每一个英雄出场的次数 然后排序后取前三

每隔5s打印出来一次
 */
public class _01_模拟lol英雄出场次数top3 {
    public static void main(String[] args) throws InterruptedException {
        //模拟英雄不断地出场  但是一个英雄出来多次，我是不是只需要记录英雄名和次数就行了
        //用sorted set 来记录
        ArrayList<String> list = new ArrayList<>();
        String hero = "潘森,波比,雷克顿,嘉文四世,莫德凯撒,普朗克,盖伦,贾克斯,兰博,科加斯,奥拉夫,内瑟斯,乌迪尔,蛮族之王,弗拉基米尔,拉克丝,费德提克,古拉加斯,卡萨丁,发条魔灵,雪人骑士,艾瑞莉娅,布兰德";
        String[] arr = hero.split(",");
        for (String name : arr) {
            list.add(name);
        }

        //获取redis的客户端
        Jedis jedis = _03_redis的客户端.getJedis();


        //这个线程是收集英雄出场的数据的
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    //接下来要让他随机的选择一个   这个元素需要丢到redis里面
                    jedis.zincrby("hero",1,list.get(RandomUtils.nextInt(0, list.size())));
                    try {
                        Thread.sleep(RandomUtils.nextInt(100,300));
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }).start();

        //再来一个线程，专门统计，每隔5s统计一次
        new Thread(new Runnable() {
            @Override
            public void run() {
                //用任务调度工具
                Timer timer = new Timer();
                timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        List<Tuple> hero1 = jedis.zrevrangeWithScores("hero", 0, 2);
                        for (Tuple tuple : hero1) {
                            String hero_name = tuple.getElement();
                            double score = tuple.getScore();
                            System.out.println("名字：" + hero_name + ",次数：" + score);
                        }
                        System.out.println("================"+System.currentTimeMillis()+"====================");
                    }
                },10000,5000);
            }
        }).start();

    }
}
